package bankrmi;

import java.rmi.Remote;
import java.rmi.RemoteException;


/**
 * Applications r�parties
 * TP 3
 * Gestion de comptes bancaires, Java RMI
 * 
 * Sp�cification de l'interface
 * (liste les m�thodes invocables � distance (sur un futur servant) par un client)
 * 
 * @author Toto
 * @version 1.0
 */
public interface BankInterface extends Remote {

	
	/**
	 * Ouverture d'un compte.
	 * 
	 * La m�thode r�alise la v�rification d�un compte ayant d�ja le m�me nom 
	 * de titulaire, auquel cas elle l�ve une exception de type	BankingException 
	 * et dans le cas contraire cr�e le compte et l�enregistre dans	la table allAccounts.
	 * 
	 * @param name
	 * @param password
	 * @return float Solde du compte
	 * @throws RemoteException, BankException
	 */
	public float openAccount(String name, String password) 
	throws RemoteException, BankException;

	
	/**
	 * Fermeture d'un compte.
	 * 
	 * Elle effectue une v�rification � l�aide de verify(...), 
	 * retire le compte de la table allAccounts, 
	 * et renvoie le montant disponible.
	 * 
	 * @param name
	 * @param password
	 * @return float Montant disponible
	 * @throws RemoteException, BankException
	 */
	public float closeAccount(String name, String password)
	throws RemoteException, BankException;

	
	/**
	 * D�pot sur un compte.
	 * 
	 * Elle effectue une v�rification du compte 
	 * et incr�mente le solde du montant 'amount' d�pos�.
	 * 
	 * @param name
	 * @param password
	 * @param amount
	 * @return float Nouveau solde
	 * @throws RemoteException, BankException
	 */
	public float deposit(String name, String password, float amount) 
	throws RemoteException, BankException;

	
	/**
	 * Retrait sur un compte.
	 * 
	 * Elle effectue une v�rification du compte, v�rifie que 
	 * le solde est suffisant pour le montant du retrait (dans le cas contraire, 
	 * elle gen�re une exception de type BankingException), d�cr�mente le solde 
	 * du montant amount et	renvoie le montant retir�.
	 * 
	 * @param name
	 * @param password
	 * @param amount
	 * @return float Nouveau solde
	 * @throws RemoteException, BankException
	 */
	public float withdraw(String name, String password, float amount)
	throws RemoteException, BankException; 

	
	/**
	 * Obtention du solde d�un compte.
	 * 
	 * Elle effectue une v�rification du compte, 
	 * puis renvoie le solde du	compte.
	 * 
	 * @param name
	 * @param password
	 * @return float Le solde
	 * @throws RemoteException, BankException
	 */
	public float getBalance(String name, String password) 
	throws RemoteException, BankException;
	
}
